最近看到一個地方:https://pkg.go.dev/std
感覺有很多神奇的東西與有趣好玩的東東可以討論
未來30天應該還有很多可以寫的材料囉,yo!
總之還是希望可以在這繁忙之餘,能完成這個自我挑戰、彌補過去兩年沒有完成的遺憾。
圖片常常在我們日常生活中所看到,現代人也越來越不喜歡看文字了...剛剛貼的網址當中,你應該會注意到有一個std 的 lib , 那就是 「image」
人如其名,當然那就是來處理圖片的部分囉,讓我們來看看這個 library 可以怎麼玩~
package main
import (
"fmt"
"os"
"image"
_ "image/jpeg"
)
func main() {
file, err := os.Open("example.jpeg")
if err != nil {
fmt.Println("無法打開圖片:", err)
return
}
defer file.Close()
img, _, err := image.Decode(file)
if err != nil {
fmt.Println("無法解碼圖片:", err)
return
}
fmt.Println("圖片寬度:", img.Bounds().Dx())
fmt.Println("圖片高度:", img.Bounds().Dy())
}
自行準備一下example.jpg
,應該就能看到這圖片的寬度與高度...
接下來,我們看看能不能對這個example.jpeg
做一點特殊處理,例如:加高亮度
package main
import (
"fmt"
"os"
"image"
"image/color"
"image/draw"
"image/jpeg"
)
func main() {
file, err := os.Open("example.jpeg")
if err != nil {
fmt.Println("無法打開圖片:", err)
return
}
defer file.Close()
img, _, err := image.Decode(file)
if err != nil {
fmt.Println("無法解碼圖片:", err)
return
}
// 創建一個新的圖片,與原始圖片尺寸相同
editedImg := image.NewRGBA(img.Bounds())
// 調整亮度
brightness := 100
draw.Draw(editedImg, editedImg.Bounds(), img, image.Point{}, draw.Src)
for y := editedImg.Bounds().Min.Y; y < editedImg.Bounds().Max.Y; y++ {
for x := editedImg.Bounds().Min.X; x < editedImg.Bounds().Max.X; x++ {
c := editedImg.At(x, y).(color.RGBA)
c.R = uint8(clamp(int(c.R) + brightness))
c.G = uint8(clamp(int(c.G) + brightness))
c.B = uint8(clamp(int(c.B) + brightness))
editedImg.Set(x, y, c)
}
}
// 保存修改後的圖片
output, err := os.Create("edited.jpg")
if err != nil {
fmt.Println("無法創建輸出文件:", err)
return
}
defer output.Close()
err = jpeg.Encode(output, editedImg, nil)
if err != nil {
fmt.Println("無法編碼圖片:", err)
return
}
fmt.Println("圖片處理完成,已保存為 edited.jpg")
}
func clamp(x int) int {
if x < 0 {
return 0
}
if x > 255 {
return 255
}
return x
}
接下來,你就會看到edited.jpg
這個檔案,就可以看到提高亮度後的圖片啦